#ifndef QD3DSHADERDESC_H
#define QD3DSHADERDESC_H
#include <QMap>
#include <string>
#include <d3dcompiler.h>
#include <d3d11.h>

class QD3DShaderDesc
{
public:

	QD3DShaderDesc (UINT flags = D3DCOMPILE_ENABLE_STRICTNESS,
			const QMap< std::string, std::string > &defines = QMap< std::string, std::string > (),
			ID3D10Include *pIncludeFileHandler = NULL);
	~QD3DShaderDesc ();

	void setDefine (const std::string &name, const std::string &value);
	void removeDefine (const std::string &name);
	const QMap< std::string, std::string > &getDefines () const;

	void setPIncludeFileHandler (ID3D10Include *pIncludeFileHandler);
	ID3D10Include *getPIncludeFileHandler ();
	const ID3D10Include *getPIncludeFileHandler () const;

	void setFlags (UINT flags);
	void addFlag (UINT flag);
	void clearFlag (UINT flag);
	UINT getFlags () const;

private:
	ID3D10Include *_pIncludeFileHandler;
	QMap< std::string, std::string > _defines;
	UINT _flags;
};

#endif // QD3DSHADERDESC_H